g_object_unref (frame_clock);
impl->hdc = GetDC (impl->handle);
+ impl->inhibit_configure = TRUE;
return surface;
}
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER));
window->resize_count += 1;
- gdk_surface_request_layout (window);
+ if (!GDK_WIN32_SURFACE (window)->force_recompute_size)
+ gdk_surface_request_layout (window);
}
static void
snap_up (window);
break;
}
+
+ if (snap != GDK_WIN32_AEROSNAP_STATE_UNDETERMINED)
+ {
+ GDK_WIN32_SURFACE (window)->inhibit_configure = TRUE;
+ GDK_WIN32_SURFACE (window)->force_recompute_size = FALSE;
+ }
}
/* Registers a dumb window class. This window
GdkWin32Surface *impl = GDK_WIN32_SURFACE (window);
gboolean maximized = gdk_toplevel_get_state (GDK_TOPLEVEL (window)) & GDK_TOPLEVEL_STATE_MAXIMIZED;
int root_x, root_y;
+ gboolean restore_configure = FALSE;
gdk_win32_surface_get_root_coords (window, x, y, &root_x, &root_y);
impl->snap_state == GDK_WIN32_AEROSNAP_STATE_FULLUP))
{
discard_snapinfo (window);
+ restore_configure = TRUE;
}
else if (maximized ||
(impl->snap_state == GDK_WIN32_AEROSNAP_STATE_HALFRIGHT ||
gboolean left_half;
GdkDisplay *display;
+ restore_configure = TRUE;
display = gdk_surface_get_display (window);
monitor = gdk_display_get_monitor_at_surface (display, window);
gdk_surface_get_geometry (window, &wx, &wy, &wwidth, &wheight);
}
}
+ if (restore_configure)
+ impl->inhibit_configure = FALSE;
+
_gdk_win32_get_window_rect (window, &rect);
cursor_name = get_cursor_name_from_op (op, edge);
static void
gdk_win32_surface_maximize (GdkSurface *window)
{
+ GdkWin32Surface *impl;
+
g_return_if_fail (GDK_IS_SURFACE (window));
if (GDK_SURFACE_DESTROYED (window))
GDK_SURFACE_HWND (window),
_gdk_win32_surface_state_to_string (window->state)));
+ impl = GDK_WIN32_SURFACE (window);
+ impl->inhibit_configure = TRUE;
+ impl->force_recompute_size = FALSE;
+
if (GDK_SURFACE_IS_MAPPED (window))
GtkShowWindow (window, SW_MAXIMIZE);
else
static void
gdk_win32_surface_unmaximize (GdkSurface *window)
{
+ GdkWin32Surface *impl;
+
g_return_if_fail (GDK_IS_SURFACE (window));
if (GDK_SURFACE_DESTROYED (window))
gdk_synthesize_surface_state (window,
GDK_TOPLEVEL_STATE_MAXIMIZED,
0);
+
+ impl = GDK_WIN32_SURFACE (window);
+
+ if (impl->inhibit_configure)
+ {
+ impl->inhibit_configure = FALSE;
+ impl->force_recompute_size = TRUE;
+ }
}
static void
&surface->x, &surface->y,
NULL, NULL);
}
+
+ if (!impl->inhibit_configure)
+ impl->force_recompute_size = TRUE;
}
}
if (!impl->drag_move_resize_context.native_move_resize_pending)
{
- surface->width = impl->next_layout.configured_width;
- surface->height = impl->next_layout.configured_height;
+ if (GDK_IS_TOPLEVEL (surface) && impl->force_recompute_size)
+ {
+ surface->width = width;
+ surface->height = height;
+ gdk_win32_surface_resize (surface, width, height);
+ impl->force_recompute_size = FALSE;
+ }
+ else
+ {
+ surface->width = impl->next_layout.configured_width;
+ surface->height = impl->next_layout.configured_height;
+ }
_gdk_surface_update_size (surface);
}